﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Model;
using RegraNegocio;
using Util;

namespace ControleDePedidos
{
    public partial class Fornecedor : Form
    {

        private Model.Fornecedor fornecedor = null;
        public Fornecedor()
        {
            InitializeComponent();
            cmbAcao.SelectedIndex = 0;
            dtgResultado.AutoGenerateColumns = false;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            fornecedor = new Model.Fornecedor();

            if (cmbAcao.SelectedIndex.Equals(0))
            {
                txtID.Text = "0";

                Dictionary<String, String> camposValidados = FormularioUtil.getInstance().validarCampos(this.Controls);

                if (camposValidados != null && camposValidados.Count > 0)
                {
                    foreach (var chave in camposValidados)
                    {
                        MessageBox.Show(chave.ToString().Replace(',', ':'), "Atenção");
                    }
                    return;
                }
                else
                {
                    fornecedor.Nome = txtNome.Text;
                    fornecedor.Cnpj = txtCNPJ.Text;
                    fornecedor.Endereco = txtEndereco.Text;
                    fornecedor.Bairro = txtBairro.Text;
                    fornecedor.Cidade = txtCidade.Text;
                    fornecedor.Uf = txtUF.Text;
                    fornecedor.Tel1 = txtTel1.Text;
                    fornecedor.Tel2 = txtTel2.Text;
                    fornecedor.Tel3 = txtTel3.Text;
                }

                if (FornecedorBO.getInstance().gravar(fornecedor))
                {

                    MessageBox.Show(String.Format("Sucesso na inserção do Fornecedor {0} ", fornecedor.Nome));

                    FormularioUtil.getInstance().limparCampos(this.Controls);
                   
                    cmbAcao.SelectedIndex = 0;
                }
                else
                {
                    MessageBox.Show("Erro na inserção do Fornecedor.");
                }
            }

            else if (cmbAcao.SelectedIndex.Equals(1))
            {
                if (txtID.Text.Equals("") && txtNome.Text.Equals("") && txtCNPJ.Text.Equals(""))
                {
                    MessageBox.Show("Favor preencher um dos campos para busca: Codigo / Nome / CNPJ");

                    return;
                }

                if (!txtID.Text.Equals(""))
                {
                    if (FormularioUtil.getInstance().isInteiro(txtID.Text))
                    {
                        fornecedor.Codigo = int.Parse(txtID.Text);
                    }
                    else
                    {
                        MessageBox.Show("O código digitado deve ser um número inteiro!");

                        return;
                    }
                }

                if (!txtNome.Text.Equals(""))
                {
                    fornecedor.Nome = txtNome.Text;
                }

                if (!txtCNPJ.Text.Equals(""))
                {
                    fornecedor.Cnpj = txtCNPJ.Text;
                }

                preencheGrid(fornecedor);
                cmbAcao.SelectedIndex = 1;
            }

            else if (cmbAcao.SelectedIndex.Equals(2))
            {
                Dictionary<String, String> camposValidados = FormularioUtil.getInstance().validarCampos(this.Controls);

                if (camposValidados != null && camposValidados.Count > 0)
                {
                    foreach (var chave in camposValidados)
                    {
                        MessageBox.Show(chave.ToString().Replace(',', ':'), "Atenção");
                    }
                    return;
                }
                else
                {
                    fornecedor.Codigo = int.Parse(txtID.Text);
                    fornecedor.Nome = txtNome.Text;
                    fornecedor.Cnpj = txtCNPJ.Text;
                    fornecedor.Endereco = txtEndereco.Text;
                    fornecedor.Bairro = txtBairro.Text;
                    fornecedor.Cidade = txtCidade.Text;
                    fornecedor.Uf = txtUF.Text;
                    fornecedor.Tel1 = txtTel1.Text;
                    fornecedor.Tel2 = txtTel2.Text;
                    fornecedor.Tel3 = txtTel3.Text;
                }

                if (FornecedorBO.getInstance().alterar(fornecedor))
                {

                    MessageBox.Show(String.Format("Sucesso na alteração do Fornecedor {0} ", fornecedor.Nome));

                    FormularioUtil.getInstance().limparCampos(this.Controls);

                    cmbAcao.SelectedIndex = 2;

                    preencheGrid(fornecedor);
                }
                else
                {
                    MessageBox.Show("Erro na alteração do Fornecedor.");
                }
            }

            else if (cmbAcao.SelectedIndex.Equals(3))
            {
                if (!txtID.Text.Equals(""))
                {
                    if (FormularioUtil.getInstance().isInteiro(txtID.Text))
                    {
                        fornecedor.Codigo = int.Parse(txtID.Text);

                        if (FornecedorBO.getInstance().excluir(fornecedor))
                        {
                            MessageBox.Show(String.Format("Sucesso na exclusão do Fornecedor {0} ", fornecedor.Nome));

                            FormularioUtil.getInstance().limparCampos(this.Controls);
                           
                            cmbAcao.SelectedIndex = 3;

                            preencheGrid(fornecedor);
                        }
                        else
                        {
                            MessageBox.Show("Erro na exclusão do Fornecedor.");
                        }
                    }
                    else
                    {
                        MessageBox.Show("O código digitado deve ser um número inteiro!");
                        return;
                    }
                }
            }
        }

        private void cmbAcao_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbAcao.SelectedIndex.Equals(0))
            {
                lblID.Visible = false;
                txtID.Visible = false;
                txtID.Enabled = false;
                txtNome.Enabled = true;
                txtCNPJ.Enabled = true;
                txtEndereco.Enabled = true;
                txtBairro.Enabled = true;
                txtCidade.Enabled = true;
                txtUF.Enabled = true;
                txtTel1.Enabled = true;
                txtTel2.Enabled = true;
                txtTel3.Enabled = true;
                btnSalvar.Text = ("Cadastrar");
            }
            else if (cmbAcao.SelectedIndex.Equals(1))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = true;
                txtNome.Enabled = true;
                txtCNPJ.Enabled = true;
                txtEndereco.Enabled = false;
                txtBairro.Enabled = false;
                txtCidade.Enabled = false;
                txtUF.Enabled = false;
                txtTel1.Enabled = false;
                txtTel2.Enabled = false;
                txtTel3.Enabled = false;
                btnSalvar.Text = ("Consultar");
            }
            else if (cmbAcao.SelectedIndex.Equals(2))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = false;
                txtNome.Enabled = true;
                txtCNPJ.Enabled = false;
                txtEndereco.Enabled = true;
                txtBairro.Enabled = true;
                txtCidade.Enabled = true;
                txtUF.Enabled = true;
                txtTel1.Enabled = true;
                txtTel2.Enabled = true;
                txtTel3.Enabled = true;
                btnSalvar.Text = ("Editar");
            }
            else if (cmbAcao.SelectedIndex.Equals(3))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = false;
                txtNome.Enabled = false;
                txtCNPJ.Enabled = false;
                txtEndereco.Enabled = false;
                txtBairro.Enabled = false;
                txtCidade.Enabled = false;
                txtUF.Enabled = false;
                txtTel1.Enabled = false;
                txtTel2.Enabled = false;
                txtTel3.Enabled = false;
                btnSalvar.Text = ("Excluir");
            }
        }

        private void dtgResultado_Click(object sender, EventArgs e)
        {
            DataGridViewRow linhaAtual = dtgResultado.CurrentRow;

            fornecedor = new Model.Fornecedor();

            fornecedor.Codigo = Int32.Parse(linhaAtual.Cells[0].Value.ToString());

            fornecedor = FornecedorBO.getInstance().consulta(fornecedor);

            txtID.Text = fornecedor.Codigo.ToString();
            txtNome.Text = fornecedor.Nome;
            txtCNPJ.Text = fornecedor.Cnpj;
            txtEndereco.Text = fornecedor.Endereco;
            txtBairro.Text = fornecedor.Bairro;
            txtCidade.Text = fornecedor.Cidade;
            txtUF.Text = fornecedor.Uf;
            txtTel1.Text = fornecedor.Tel1;
            txtTel2.Text = fornecedor.Tel2;
            txtTel3.Text = fornecedor.Tel3;
        }

        private void preencheGrid(Model.Fornecedor fornecedor)
        {
            try
            {
                List<Model.Fornecedor> fornecedoresRecuperados = FornecedorBO.getInstance().recuperarFornecedores(fornecedor);

                dtgResultado.DataSource = fornecedoresRecuperados;
                dtgResultado.Visible = true;
            }
            catch (Exception cause)
            {
                dtgResultado.DataSource = null;
                dtgResultado.Visible = false;
                MessageBox.Show(cause.Message);
            }
        }
    }
}

